//a进程创建
#include "comm.hpp"
#include "log.hpp"

int main()
{
 Init init;
    //sleep(2);
    int shmid=CreatShm();
    log(DEBUG,"Creat success !! shmid is :%x",shmid);
    //第三步挂载到进程地址空间
    char*shmptr=(char*)shmat(shmid,NULL,0);

        //打开管道文件（通过管道文件实现同步）
    int fd=open(FIFOFILE_NAME,O_RDONLY);//等待写入方打开之后，自己才会打开文件，向后执行，open阻塞
    if(fd<0)
    {
        perror("open");
        exit(OPEN_ERR);
    }


    //第四步 使用共享内存空间通信
    struct shmid_ds shmds;//用来获取共享内存属性
    shmctl(shmid,IPC_STAT,&shmds);//获取共享内存属性

    while(true)
    {
        char c;
        int n=read(fd,&c,sizeof(c));
        if(n==0)break;
        else if(n<0)break;

        printf("%s\n",shmptr);
        std::cout<<"nattch:"<<shmds.shm_nattch<<std::endl;
        std::cout<<"pid:"<<shmds.shm_cpid<<std::endl;
        std::cout<<"segsz:"<<shmds.shm_segsz<<std::endl;
        std::cout<<"atime:"<<shmds.shm_atime<<std::endl;
        std::cout<<std::endl;
    }

    //第五步 取消关联
    //sleep(10);
    int n=shmdt(shmptr);
    if(n<0)
    {
        log(ERROR,"取消关联失败 ! error message:%s  error code: %d",strerror(errno),errno);
        exit(SHMDT_ERR);
    }
    //第六步释放内存

    //sleep(10);
    shmctl(shmid,IPC_RMID,nullptr);
    close(fd);
    return 0;
}